home *** CD-ROM | disk | FTP | other *** search
Text File | 1980-01-04 | 18.6 KB | 1,077 lines |
- *****************************************
- * Pro-Packer v1.0 Replay-Routine. *
- * Based upon the PT1.1B-Replayer *
- * by Lars 'ZAP' Hamre/Amiga Freelancers.*
- * Modified by Estrup/Static Bytes. *
- * NB! This replayer uses Lev6-Interrupt.*
- *****************************************
-
- mt_init LEA mt_data,A0
- MOVE.L A0,mt_SongDataPtr
- LEA 250(A0),A1
- MOVE.W #511,D0
- MOVEQ #0,D1
- mtloop MOVE.L D1,D2
- SUBQ.W #1,D0
- mtloop2 MOVE.B (A1)+,D1
- CMP.W D2,D1
- BGT.S mtloop
- DBRA D0,mtloop2
- ADDQ #1,D2
-
- LEA mt_SampleStarts(PC),A1
- MULU #256,D2
- ADD.L #762,D2
- ADD.L A0,D2
- MOVE.L D2,A2
- MOVEQ #30,D0
- mtloop3 CLR.L (A2)
- MOVE.L A2,(A1)+
- MOVEQ #0,D1
- MOVE.W (A0),D1
- ADD.L D1,D1
- ADD.L D1,A2
- LEA 8(A0),A0
- DBRA D0,mtloop3
-
- OR.B #2,$BFE001
- MOVE.B #6,mt_speed
- CLR.B mt_counter
- CLR.B mt_SongPos
- CLR.W mt_PatternPos
- mt_end LEA $DFF096,A0
- CLR.W $12(A0)
- CLR.W $22(A0)
- CLR.W $32(A0)
- CLR.W $42(A0)
- MOVE.W #$F,(A0)
- RTS
-
- mt_music
- MOVEM.L D0-D4/A0-A6,-(SP)
- ADDQ.B #1,mt_counter
- MOVE.B mt_counter(PC),D0
- CMP.B mt_speed(PC),D0
- BLO.S mt_NoNewNote
- CLR.B mt_counter
- TST.B mt_PattDelTime2
- BEQ.S mt_GetNewNote
- BSR.S mt_NoNewAllChannels
- BRA.W mt_dskip
-
- mt_NoNewNote
- BSR.S mt_NoNewAllChannels
- BRA.W mt_NoNewPosYet
-
- mt_NoNewAllChannels
- LEA $DFF090,A5
- LEA mt_chan1temp-44(PC),A6
- BSR.W mt_CheckEfx
- BSR.W mt_CheckEfx
- BSR.W mt_CheckEfx
- BRA.W mt_CheckEfx
-
- mt_GetNewNote
- MOVE.L mt_SongDataPtr(PC),A0
- LEA (A0),A3
- LEA 122(A0),A2 ;pattpo
- LEA 762(A0),A0 ;patterndata
- CLR.W mt_DMACONtemp
-
- LEA $DFF090,A5
- LEA mt_chan1temp-44(PC),A6
- BSR.S mt_DoVoice
- BSR.S mt_DoVoice
- BSR.B mt_DoVoice
- BSR.B mt_DoVoice
- BRA.W mt_SetDMA
-
- mt_DoVoice
- MOVEQ #0,D0
- MOVEQ #0,D1
- MOVE.B mt_SongPos(PC),D0
- LEA 128(A2),A2
- MOVE.B (A2,D0.W),D1
- ASL #8,D1
- ADD.W mt_PatternPos(PC),D1
- LEA $10(A5),A5
- LEA 44(A6),A6
-
- TST.L (A6)
- BNE.S mt_plvskip
- BSR.W mt_PerNop
- mt_plvskip
- MOVE.L (A0,D1.W),(A6)
- MOVE.B 2(A6),D2
- AND.L #$F0,D2
- LSR.B #4,D2
- MOVE.B (A6),D0
- AND.B #$F0,D0
- OR.B D0,D2
- BEQ.B mt_SetRegs
- MOVEQ #0,D3
- LEA mt_SampleStarts(PC),A1
- SUBQ #1,D2
- MOVE D2,D4
- ADD D2,D2
- ADD D2,D2
- ASL #3,D4
- MOVE.L (A1,D2.L),4(A6)
- MOVE.W (A3,D4.W),8(A6)
- MOVE.W (A3,D4.W),40(A6)
- MOVE.W 2(A3,D4.W),18(A6)
- MOVE.L 4(A6),D2 ; Get start
- MOVE.W 4(A3,D4.L),D3 ; Get repeat
- BEQ.S mt_NoLoop
- MOVE.W D3,D0 ; Get repeat
- ADD.W D3,D3
- ADD.L D3,D2 ; Add repeat
- ADD.W 6(A3,D4.L),D0 ; Add replen
- MOVE.W D0,8(A6)
-
- mt_NoLoop
- MOVE.L D2,10(A6)
- MOVE.L D2,36(A6)
- MOVE.W 6(A3,D4.L),14(A6) ; Save replen
- MOVE.B 19(A6),9(A5) ; Set volume
- mt_SetRegs
- MOVE.W (A6),D0
- AND.W #$0FFF,D0
- BEQ.W mt_CheckMoreEfx ; If no note
- MOVE.W 2(A6),D0
- AND.W #$0FF0,D0
- CMP.W #$0E50,D0
- BEQ.S mt_DoSetFineTune
- MOVE.B 2(A6),D0
- AND.B #$0F,D0
- CMP.B #3,D0 ; TonePortamento
- BEQ.S mt_ChkTonePorta
- CMP.B #5,D0
- BEQ.S mt_ChkTonePorta
- CMP.B #9,D0 ; Sample Offset
- BNE.S mt_SetPeriod
- BSR.W mt_CheckMoreEfx
- BRA.S mt_SetPeriod
-
- mt_ChkTonePorta
- BSR.W mt_SetTonePorta
- BRA.W mt_CheckMoreEfx
-
- mt_DoSetFineTune
- BSR.W mt_SetFineTune
-
- mt_SetPeriod
- MOVEM.L D1/A1,-(SP)
- MOVE.W (A6),D1
- AND.W #$0FFF,D1
- LEA mt_PeriodTable(PC),A1
- MOVEQ #36,D7
- mt_ftuloop
- CMP.W (A1)+,D1
- BHS.S mt_ftufound
- DBRA D7,mt_ftuloop
- mt_ftufound
- MOVEQ #0,D1
- MOVE.B 18(A6),D1
- ASL #3,D1
- MOVE D1,D0
- ASL #3,D1
- ADD D0,D1
- MOVE.W -2(A1,D1.W),16(A6)
- MOVEM.L (SP)+,D1/A1
-
- MOVE.W 2(A6),D0
- AND.W #$0FF0,D0
- CMP.W #$0ED0,D0 ; Notedelay
- BEQ.W mt_CheckMoreEfx
-
- MOVE.W 20(A6),$DFF096
- BTST #2,30(A6)
- BNE.S mt_vibnoc
- CLR.B 27(A6)
- mt_vibnoc
- BTST #6,30(A6)
- BNE.S mt_trenoc
- CLR.B 29(A6)
- mt_trenoc
- MOVE.L 4(A6),(A5) ; Set start
- MOVE.W 8(A6),4(A5) ; Set length
- MOVE.W 16(A6),6(A5) ; Set period
- MOVE.W 20(A6),D0
- OR.W D0,mt_DMACONtemp
- BRA.W mt_CheckMoreEfx
-
- mt_SetDMA
- lea $bfd000,a3
- move.b #$7f,$d00(a3)
- move.w #$2000,$dff09c
- move.w #$a000,$dff09a
- move.l $78.w,mt_oldirq
- move.l #mt_irq1,$78.w
- moveq #0,d0
- move.b d0,$e00(a3)
- move.b #$a8,$400(a3)
- move.b d0,$500(a3)
- move.b #$11,$e00(a3)
- move.b #$81,$d00(a3)
- OR.W #$8000,mt_DMACONtemp
- bra.w mt_dskip
-
- mt_irq1:tst.b $bfdd00
- MOVE.W mt_dmacontemp(pc),$DFF096
- move.w #$2000,$dff09c
- move.l #mt_irq2,$78.w
- rte
-
- mt_irq2:tst.b $bfdd00
- movem.l a5-a6,-(a7)
- LEA $DFF0A0,A5
- LEA mt_chan1temp(PC),A6
- MOVE.L 10(A6),(A5)
- MOVE.W 14(A6),4(A5)
- MOVE.L 54(A6),$10(A5)
- MOVE.W 58(A6),$14(A5)
- MOVE.L 98(A6),$20(A5)
- MOVE.W 102(A6),$24(A5)
- MOVE.L 142(A6),$30(A5)
- MOVE.W 146(A6),$34(A5)
- move.b #0,$bfde00
- move.b #$7f,$bfdd00
- move.l mt_oldirq(pc),$78.w
- move.w #$2000,$dff09c
- movem.l (a7)+,a5-a6
- rte
-
- mt_dskip
- LEA mt_PattDelTime(PC),A4
- ADDQ.W #4,3(A4)
- MOVE.B (A4),D0
- BEQ.S mt_dskc
- MOVE.B D0,(A4)
- CLR.B (A4)
- mt_dskc TST.B 1(A4)
- BEQ.S mt_dska
- SUBQ.B #1,1(A4)
- BEQ.S mt_dska
- SUBQ.W #4,3(A4)
- mt_dska TST.B mt_PBreakFlag
- BEQ.S mt_nnpysk
- SF mt_PBreakFlag
- MOVEQ #0,D0
- MOVE.B mt_PBreakPos(PC),D0
- CLR.B mt_PBreakPos
- LSL #2,D0
- MOVE.W D0,3(A4)
- mt_nnpysk
- CMP.W #256,3(A4)
- BLO.S mt_NoNewPosYet
- mt_NextPosition
- MOVEQ #0,D0
- MOVE.B mt_PBreakPos(PC),D0
- LSL #2,D0
- MOVE.W D0,3(A4)
- CLR.B mt_PBreakPos
- CLR.B mt_PosJumpFlag
- ADDQ.B #1,mt_SongPos
- AND.B #$7F,mt_SongPos
- MOVE.B mt_SongPos(PC),D1
- MOVE.L mt_SongDataPtr(PC),A0
- CMP.B 248(A0),D1
- BLO.S mt_NoNewPosYet
- CLR.B mt_SongPos
- mt_NoNewPosYet
- TST.B mt_PosJumpFlag
- BNE.S mt_NextPosition
- MOVEM.L (SP)+,D0-D4/A0-A6
- RTS
-
- mt_CheckEfx
- LEA $10(A5),A5
- LEA 44(A6),A6
- BSR.W mt_UpdateFunk
- MOVE.W 2(A6),D0
- AND.W #$0FFF,D0
- BEQ.S mt_PerNop
- MOVE.B 2(A6),D0
- AND.W #$0F,D0
- BEQ.S mt_Arpeggio
- SUBQ #1,D0
- BEQ.W mt_PortaUp
- SUBQ #1,D0
- BEQ.W mt_PortaDown
- SUBQ #1,D0
- BEQ.W mt_TonePortamento
- SUBQ #1,D0
- BEQ.W mt_Vibrato
- SUBQ #1,D0
- BEQ.W mt_TonePlusVolSlide
- SUBQ #1,D0
- BEQ.W mt_VibratoPlusVolSlide
- SUBQ #8,D0
- BEQ.W mt_E_Commands
- SetBack MOVE.W 16(A6),6(A5)
- ADDQ #7,D0
- BEQ.W mt_Tremolo
- SUBQ #3,D0
- BEQ.W mt_VolumeSlide
- mt_Return2
- RTS
-
- mt_PerNop
- MOVE.W 16(A6),6(A5)
- RTS
-
- mt_Arpeggio
- MOVEQ #0,D0
- MOVE.B mt_counter(PC),D0
- DIVS #3,D0
- SWAP D0
- TST.W D0
- BEQ.S mt_Arpeggio2
- SUBQ #2,D0
- BEQ.S mt_Arpeggio1
- MOVEQ #0,D0
- MOVE.B 3(A6),D0
- LSR.B #4,D0
- BRA.S mt_Arpeggio3
-
- mt_Arpeggio2
- MOVE.W 16(A6),6(A5)
- RTS
-
- mt_Arpeggio1
- MOVE.B 3(A6),D0
- AND.W #15,D0
- mt_Arpeggio3
- ADD.W D0,D0
- MOVEQ #0,D1
- MOVE.B 18(A6),D1
- ASL #3,D1
- MOVE D1,D2
- ASL #3,D1
- ADD D2,D1
- LEA mt_PeriodTable(PC),A0
- ADD.L D1,A0
- MOVE.W 16(A6),D1
- MOVEQ #36,D7
- mt_arploop
- CMP.W (A0)+,D1
- BHS.S mt_Arpeggio4
- DBRA D7,mt_arploop
- RTS
-
- mt_Arpeggio4
- MOVE.W -2(A0,D0.W),6(A5)
- RTS
-
- mt_FinePortaUp
- TST.B mt_counter
- BNE.S mt_Return2
- MOVE.B #$0F,mt_LowMask
- mt_PortaUp
- MOVEQ #0,D0
- MOVE.B 3(A6),D0
- AND.B mt_LowMask(PC),D0
- MOVE.B #$FF,mt_LowMask
- SUB.W D0,16(A6)
- MOVE.W 16(A6),D0
- AND.W #$0FFF,D0
- CMP.W #113,D0
- BPL.S mt_PortaUskip
- AND.W #$F000,16(A6)
- OR.W #113,16(A6)
- mt_PortaUskip
- MOVE.W 16(A6),D0
- AND.W #$0FFF,D0
- MOVE.W D0,6(A5)
- RTS
-
- mt_FinePortaDown
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B #$0F,mt_LowMask
- mt_PortaDown
- CLR.W D0
- MOVE.B 3(A6),D0
- AND.B mt_LowMask(PC),D0
- MOVE.B #$FF,mt_LowMask
- ADD.W D0,16(A6)
- MOVE.W 16(A6),D0
- AND.W #$0FFF,D0
- CMP.W #856,D0
- BMI.S mt_PortaDskip
- AND.W #$F000,16(A6)
- OR.W #856,16(A6)
- mt_PortaDskip
- MOVE.W 16(A6),D0
- AND.W #$0FFF,D0
- MOVE.W D0,6(A5)
- RTS
-
- mt_SetTonePorta
- MOVEM.L A0,-(SP)
- MOVE.W (A6),D2
- AND.W #$0FFF,D2
- MOVEQ #0,D0
- MOVE.B 18(A6),D0
- ADD D0,D0
- MOVE D0,D7
- ADD D0,D0
- ADD D0,D0
- ADD D0,D7
- ASL #3,D0
- ADD D7,D0
- LEA mt_PeriodTable(PC),A0
- ADD.L D0,A0
- MOVEQ #0,D0
- mt_StpLoop
- CMP.W (A0,D0.W),D2
- BHS.S mt_StpFound
- ADDQ #2,D0
- CMP.W #37*2,D0
- BLO.S mt_StpLoop
- MOVEQ #35*2,D0
- mt_StpFound
- BTST #3,18(A6)
- BEQ.S mt_StpGoss
- TST.W D0
- BEQ.S mt_StpGoss
- SUBQ #2,D0
- mt_StpGoss
- MOVE.W (A0,D0.W),D2
- MOVE.L (SP)+,A0
- MOVE.W D2,24(A6)
- MOVE.W 16(A6),D0
- CLR.B 22(A6)
- CMP.W D0,D2
- BEQ.S mt_ClearTonePorta
- BGE.W mt_Return2
- MOVE.B #1,22(A6)
- RTS
-
- mt_ClearTonePorta
- CLR.W 24(A6)
- RTS
-
- mt_TonePortamento
- MOVE.B 3(A6),D0
- BEQ.S mt_TonePortNoChange
- MOVE.B D0,23(A6)
- CLR.B 3(A6)
- mt_TonePortNoChange
- TST.W 24(A6)
- BEQ.W mt_Return2
- MOVEQ #0,D0
- MOVE.B 23(A6),D0
- TST.B 22(A6)
- BNE.S mt_TonePortaUp
- mt_TonePortaDown
- ADD.W D0,16(A6)
- MOVE.W 24(A6),D0
- CMP.W 16(A6),D0
- BGT.S mt_TonePortaSetPer
- MOVE.W 24(A6),16(A6)
- CLR.W 24(A6)
- BRA.S mt_TonePortaSetPer
-
- mt_TonePortaUp
- SUB.W D0,16(A6)
- MOVE.W 24(A6),D0
- CMP.W 16(A6),D0
- BLT.S mt_TonePortaSetPer
- MOVE.W 24(A6),16(A6)
- CLR.W 24(A6)
-
- mt_TonePortaSetPer
- MOVE.W 16(A6),D2
- MOVE.B 31(A6),D0
- AND.B #$0F,D0
- BEQ.S mt_GlissSkip
- MOVEQ #0,D0
- MOVE.B 18(A6),D0
- ASL #3,D0
- MOVE D0,D1
- ASL #3,D0
- ADD D1,D0
- LEA mt_PeriodTable(PC),A0
- ADD.L D0,A0
- MOVEQ #0,D0
- mt_GlissLoop
- CMP.W (A0,D0.W),D2
- BHS.S mt_GlissFound
- ADDQ #2,D0
- CMP.W #36*2,D0
- BLO.S mt_GlissLoop
- MOVEQ #35*2,D0
- mt_GlissFound
- MOVE.W (A0,D0.W),D2
- mt_GlissSkip
- MOVE.W D2,6(A5) ; Set period
- RTS
-
- mt_Vibrato
- MOVE.B 3(A6),D0
- BEQ.S mt_Vibrato2
- MOVE.B 26(A6),D2
- AND.B #$0F,D0
- BEQ.S mt_vibskip
- AND.B #$F0,D2
- OR.B D0,D2
- mt_vibskip
- MOVE.B 3(A6),D0
- AND.B #$F0,D0
- BEQ.S mt_vibskip2
- AND.B #$0F,D2
- OR.B D0,D2
- mt_vibskip2
- MOVE.B D2,26(A6)
- mt_Vibrato2
- MOVE.B 27(A6),D0
- LEA mt_VibratoTable(PC),A4
- LSR.W #2,D0
- AND.W #$001F,D0
- MOVE.B 30(A6),D2
- AND.W #$03,D2
- BEQ.S mt_vib_sine
- LSL.B #3,D0
- CMP.B #1,D2
- BEQ.S mt_vib_rampdown
- MOVE.B #255,D2
- BRA.S mt_vib_set
- mt_vib_rampdown
- TST.B 27(A6)
- BPL.S mt_vib_rampdown2
- MOVE.B #255,D2
- SUB.B D0,D2
- BRA.S mt_vib_set
- mt_vib_rampdown2
- MOVE.B D0,D2
- BRA.S mt_vib_set
- mt_vib_sine
- MOVE.B 0(A4,D0.W),D2
- mt_vib_set
- MOVE.B 26(A6),D0
- AND.W #15,D0
- MULU D0,D2
- LSR.W #7,D2
- MOVE.W 16(A6),D0
- TST.B 27(A6)
- BMI.S mt_VibratoNeg
- ADD.W D2,D0
- BRA.S mt_Vibrato3
- mt_VibratoNeg
- SUB.W D2,D0
- mt_Vibrato3
- MOVE.W D0,6(A5)
- MOVE.B 26(A6),D0
- LSR.W #2,D0
- AND.W #$003C,D0
- ADD.B D0,27(A6)
- RTS
-
- mt_TonePlusVolSlide
- BSR.W mt_TonePortNoChange
- BRA.W mt_VolumeSlide
-
- mt_VibratoPlusVolSlide
- BSR.S mt_Vibrato2
- BRA.W mt_VolumeSlide
-
- mt_Tremolo
- MOVE.B 3(A6),D0
- BEQ.S mt_Tremolo2
- MOVE.B 28(A6),D2
- AND.B #$0F,D0
- BEQ.S mt_treskip
- AND.B #$F0,D2
- OR.B D0,D2
- mt_treskip
- MOVE.B 3(A6),D0
- AND.B #$F0,D0
- BEQ.S mt_treskip2
- AND.B #$0F,D2
- OR.B D0,D2
- mt_treskip2
- MOVE.B D2,28(A6)
- mt_Tremolo2
- MOVE.B 29(A6),D0
- LEA mt_VibratoTable(PC),A4
- LSR.W #2,D0
- AND.W #$001F,D0
- MOVEQ #0,D2
- MOVE.B 30(A6),D2
- LSR.B #4,D2
- AND.B #$03,D2
- BEQ.S mt_tre_sine
- LSL.B #3,D0
- CMP.B #1,D2
- BEQ.S mt_tre_rampdown
- MOVE.B #255,D2
- BRA.S mt_tre_set
- mt_tre_rampdown
- TST.B 27(A6)
- BPL.S mt_tre_rampdown2
- MOVE.B #255,D2
- SUB.B D0,D2
- BRA.S mt_tre_set
- mt_tre_rampdown2
- MOVE.B D0,D2
- BRA.S mt_tre_set
- mt_tre_sine
- MOVE.B 0(A4,D0.W),D2
- mt_tre_set
- MOVE.B 28(A6),D0
- AND.W #15,D0
- MULU D0,D2
- LSR.W #6,D2
- MOVEQ #0,D0
- MOVE.B 19(A6),D0
- TST.B 29(A6)
- BMI.S mt_TremoloNeg
- ADD.W D2,D0
- BRA.S mt_Tremolo3
- mt_TremoloNeg
- SUB.W D2,D0
- mt_Tremolo3
- BPL.S mt_TremoloSkip
- CLR.W D0
- mt_TremoloSkip
- CMP.W #$40,D0
- BLS.S mt_TremoloOk
- MOVE.W #$40,D0
- mt_TremoloOk
- MOVE.W D0,8(A5)
- MOVE.B 28(A6),D0
- LSR.W #2,D0
- AND.W #$003C,D0
- ADD.B D0,29(A6)
- RTS
-
- mt_SampleOffset
- MOVEQ #0,D0
- MOVE.B 3(A6),D0
- BEQ.S mt_sononew
- MOVE.B D0,32(A6)
- mt_sononew
- MOVE.B 32(A6),D0
- LSL.W #7,D0
- CMP.W 8(A6),D0
- BGE.S mt_sofskip
- SUB.W D0,8(A6)
- ADD.W D0,D0
- ADD.L D0,4(A6)
- RTS
- mt_sofskip
- MOVE.W #$0001,8(A6)
- RTS
-
- mt_VolumeSlide
- MOVEQ #0,D0
- MOVE.B 3(A6),D0
- LSR.B #4,D0
- TST.B D0
- BEQ.S mt_VolSlideDown
- mt_VolSlideUp
- ADD.B D0,19(A6)
- CMP.B #$40,19(A6)
- BMI.S mt_vsuskip
- MOVE.B #$40,19(A6)
- mt_vsuskip
- MOVE.B 19(A6),9(A5)
- RTS
-
- mt_VolSlideDown
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- mt_VolSlideDown2
- SUB.B D0,19(A6)
- BPL.S mt_vsdskip
- CLR.B 19(A6)
- mt_vsdskip
- MOVE.B 19(A6),9(A5)
- RTS
-
- mt_PositionJump
- MOVE.B 3(A6),D0
- SUBQ #1,D0
- MOVE.B D0,mt_SongPos
- mt_pj2 CLR.B mt_PBreakPos
- ST mt_PosJumpFlag
- RTS
-
- mt_VolumeChange
- MOVE.B 3(A6),D0
- CMP.B #$40,D0
- BLS.S mt_VolumeOk
- MOVEQ #$40,D0
- mt_VolumeOk
- MOVE.B D0,19(A6)
- MOVE.B D0,9(A5)
- RTS
-
- mt_PatternBreak
- MOVEQ #0,D0
- MOVE.B 3(A6),D0
- MOVE.W D0,D2
- LSR.B #4,D0
- ADD D0,D0
- MOVE D0,D1
- ADD D0,D0
- ADD D0,D0
- ADD D1,D0
- AND.B #$0F,D2
- ADD.B D2,D0
- CMP.B #63,D0
- BHI.S mt_pj2
- MOVE.B D0,mt_PBreakPos
- ST mt_PosJumpFlag
- RTS
-
- mt_SetSpeed
- MOVE.B 3(A6),D0
- BEQ.W mt_Return2
- CLR.B mt_counter
- MOVE.B D0,mt_speed
- RTS
-
- mt_CheckMoreEfx
- BSR.W mt_UpdateFunk
- MOVE.B 2(A6),D0
- AND.B #$0F,D0
- SUB.B #9,D0
- BEQ.W mt_SampleOffset
- SUBQ #2,D0
- BEQ.W mt_PositionJump
- SUBQ #1,D0
- BEQ.B mt_VolumeChange
- SUBQ #1,D0
- BEQ.S mt_PatternBreak
- SUBQ #1,D0
- BEQ.S mt_E_Commands
- SUBQ #1,D0
- BEQ.S mt_SetSpeed
- BRA.W mt_PerNop
-
- mt_E_Commands
- MOVE.B 3(A6),D0
- AND.W #$F0,D0
- LSR.B #4,D0
- BEQ.S mt_FilterOnOff
- SUBQ #1,D0
- BEQ.W mt_FinePortaUp
- SUBQ #1,D0
- BEQ.W mt_FinePortaDown
- SUBQ #1,D0
- BEQ.S mt_SetGlissControl
- SUBQ #1,D0
- BEQ.B mt_SetVibratoControl
- SUBQ #1,D0
- BEQ.B mt_SetFineTune
- SUBQ #1,D0
- BEQ.B mt_JumpLoop
- SUBQ #1,D0
- BEQ.W mt_SetTremoloControl
- SUBQ #2,D0
- BEQ.W mt_RetrigNote
- SUBQ #1,D0
- BEQ.W mt_VolumeFineUp
- SUBQ #1,D0
- BEQ.W mt_VolumeFineDown
- SUBQ #1,D0
- BEQ.W mt_NoteCut
- SUBQ #1,D0
- BEQ.W mt_NoteDelay
- SUBQ #1,D0
- BEQ.W mt_PatternDelay
- BRA.W mt_FunkIt
-
- mt_FilterOnOff
- MOVE.B 3(A6),D0
- AND.B #1,D0
- ADD.B D0,D0
- AND.B #$FD,$BFE001
- OR.B D0,$BFE001
- RTS
-
- mt_SetGlissControl
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- AND.B #$F0,31(A6)
- OR.B D0,31(A6)
- RTS
-
- mt_SetVibratoControl
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- AND.B #$F0,30(A6)
- OR.B D0,30(A6)
- RTS
-
- mt_SetFineTune
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- MOVE.B D0,18(A6)
- RTS
-
- mt_JumpLoop
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- BEQ.S mt_SetLoop
- TST.B 34(A6)
- BEQ.S mt_jumpcnt
- SUBQ.B #1,34(A6)
- BEQ.W mt_Return2
- mt_jmploop MOVE.B 33(A6),mt_PBreakPos
- ST mt_PBreakFlag
- RTS
-
- mt_jumpcnt
- MOVE.B D0,34(A6)
- BRA.S mt_jmploop
-
- mt_SetLoop
- MOVE.W mt_PatternPos(PC),D0
- LSR #2,D0
- MOVE.B D0,33(A6)
- RTS
-
- mt_SetTremoloControl
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- LSL.B #4,D0
- AND.B #$0F,30(A6)
- OR.B D0,30(A6)
- RTS
-
- mt_RetrigNote
- MOVE.L D1,-(SP)
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- BEQ.S mt_rtnend
- MOVEQ #0,d1
- MOVE.B mt_counter(PC),D1
- BNE.S mt_rtnskp
- MOVE.W (A6),D1
- AND.W #$0FFF,D1
- BNE.S mt_rtnend
- MOVEQ #0,D1
- MOVE.B mt_counter(PC),D1
- mt_rtnskp
- DIVU D0,D1
- SWAP D1
- TST.W D1
- BNE.S mt_rtnend
- mt_DoRetrig
- MOVE.W 20(A6),$DFF096 ; Channel DMA off
- MOVE.L 4(A6),(A5) ; Set sampledata pointer
- MOVE.W 8(A6),4(A5) ; Set length
- BSR.W mt_WaitDMA
- MOVE.W 20(A6),D0
- BSET #15,D0
- MOVE.W D0,$DFF096
- BSR.W mt_WaitDMA
- MOVE.L 10(A6),(A5)
- MOVE.L 14(A6),4(A5)
- mt_rtnend
- MOVE.L (SP)+,D1
- RTS
-
- mt_VolumeFineUp
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B 3(A6),D0
- AND.W #$F,D0
- BRA.W mt_VolSlideUp
-
- mt_VolumeFineDown
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- BRA.W mt_VolSlideDown2
-
- mt_NoteCut
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- CMP.B mt_counter(PC),D0
- BNE.W mt_Return2
- CLR.B 19(A6)
- CLR.W 8(A5)
- RTS
-
- mt_NoteDelay
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- CMP.B mt_Counter(PC),D0
- BNE.W mt_Return2
- MOVE.W (A6),D0
- BEQ.W mt_Return2
- MOVE.L D1,-(SP)
- BRA.W mt_DoRetrig
-
- mt_PatternDelay
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B 3(A6),D0
- AND.W #$0F,D0
- TST.B mt_PattDelTime2
- BNE.W mt_Return2
- ADDQ.B #1,D0
- MOVE.B D0,mt_PattDelTime
- RTS
-
- mt_FunkIt
- TST.B mt_counter
- BNE.W mt_Return2
- MOVE.B 3(A6),D0
- AND.B #$0F,D0
- LSL.B #4,D0
- AND.B #$0F,31(A6)
- OR.B D0,31(A6)
- TST.B D0
- BEQ.W mt_Return2
- mt_UpdateFunk
- MOVEM.L D1/A0,-(SP)
- MOVEQ #0,D0
- MOVE.B 31(A6),D0
- LSR.B #4,D0
- BEQ.S mt_funkend
- LEA mt_FunkTable(PC),A0
- MOVE.B (A0,D0.W),D0
- ADD.B D0,35(A6)
- BTST #7,35(A6)
- BEQ.S mt_funkend
- CLR.B 35(A6)
-
- MOVE.L 10(A6),D0
- MOVEQ #0,D1
- MOVE.W 14(A6),D1
- ADD.L D1,D0
- ADD.L D1,D0
- MOVE.L 36(A6),A0
- ADDQ.L #1,A0
- CMP.L D0,A0
- BLO.S mt_funkok
- MOVE.L 10(A6),A0
- mt_funkok
- MOVE.L A0,36(A6)
- NEG.B (A0)
- SUBQ.B #1,(A0)
- mt_funkend
- MOVEM.L (SP)+,D1/A0
- RTS
-
- mt_WaitDMA
- MOVEQ #3,D0
- mt_WaitDMA2
- MOVE.B $DFF006,D1
- mt_WaitDMA3
- CMP.B $DFF006,D1
- BEQ.S mt_WaitDMA3
- DBF D0,mt_WaitDMA2
- RTS
-
- mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
-
- mt_VibratoTable
- dc.b 0, 24, 49, 74, 97,120,141,161
- dc.b 180,197,212,224,235,244,250,253
- dc.b 255,253,250,244,235,224,212,197
- dc.b 180,161,141,120, 97, 74, 49, 24
-
- mt_PeriodTable
- ; Tuning 0, Normal
- dc.w 856,808,762,720,678,640,604,570,538,508,480,453
- dc.w 428,404,381,360,339,320,302,285,269,254,240,226
- dc.w 214,202,190,180,170,160,151,143,135,127,120,113
- ; Tuning 1
- dc.w 850,802,757,715,674,637,601,567,535,505,477,450
- dc.w 425,401,379,357,337,318,300,284,268,253,239,225
- dc.w 213,201,189,179,169,159,150,142,134,126,119,113
- ; Tuning 2
- dc.w 844,796,752,709,670,632,597,563,532,502,474,447
- dc.w 422,398,376,355,335,316,298,282,266,251,237,224
- dc.w 211,199,188,177,167,158,149,141,133,125,118,112
- ; Tuning 3
- dc.w 838,791,746,704,665,628,592,559,528,498,470,444
- dc.w 419,395,373,352,332,314,296,280,264,249,235,222
- dc.w 209,198,187,176,166,157,148,140,132,125,118,111
- ; Tuning 4
- dc.w 832,785,741,699,660,623,588,555,524,495,467,441
- dc.w 416,392,370,350,330,312,294,278,262,247,233,220
- dc.w 208,196,185,175,165,156,147,139,131,124,117,110
- ; Tuning 5
- dc.w 826,779,736,694,655,619,584,551,520,491,463,437
- dc.w 413,390,368,347,328,309,292,276,260,245,232,219
- dc.w 206,195,184,174,164,155,146,138,130,123,116,109
- ; Tuning 6
- dc.w 820,774,730,689,651,614,580,547,516,487,460,434
- dc.w 410,387,365,345,325,307,290,274,258,244,230,217
- dc.w 205,193,183,172,163,154,145,137,129,122,115,109
- ; Tuning 7
- dc.w 814,768,725,684,646,610,575,543,513,484,457,431
- dc.w 407,384,363,342,323,305,288,272,256,242,228,216
- dc.w 204,192,181,171,161,152,144,136,128,121,114,108
- ; Tuning -8
- dc.w 907,856,808,762,720,678,640,604,570,538,508,480
- dc.w 453,428,404,381,360,339,320,302,285,269,254,240
- dc.w 226,214,202,190,180,170,160,151,143,135,127,120
- ; Tuning -7
- dc.w 900,850,802,757,715,675,636,601,567,535,505,477
- dc.w 450,425,401,379,357,337,318,300,284,268,253,238
- dc.w 225,212,200,189,179,169,159,150,142,134,126,119
- ; Tuning -6
- dc.w 894,844,796,752,709,670,632,597,563,532,502,474
- dc.w 447,422,398,376,355,335,316,298,282,266,251,237
- dc.w 223,211,199,188,177,167,158,149,141,133,125,118
- ; Tuning -5
- dc.w 887,838,791,746,704,665,628,592,559,528,498,470
- dc.w 444,419,395,373,352,332,314,296,280,264,249,235
- dc.w 222,209,198,187,176,166,157,148,140,132,125,118
- ; Tuning -4
- dc.w 881,832,785,741,699,660,623,588,555,524,494,467
- dc.w 441,416,392,370,350,330,312,294,278,262,247,233
- dc.w 220,208,196,185,175,165,156,147,139,131,123,117
- ; Tuning -3
- dc.w 875,826,779,736,694,655,619,584,551,520,491,463
- dc.w 437,413,390,368,347,328,309,292,276,260,245,232
- dc.w 219,206,195,184,174,164,155,146,138,130,123,116
- ; Tuning -2
- dc.w 868,820,774,730,689,651,614,580,547,516,487,460
- dc.w 434,410,387,365,345,325,307,290,274,258,244,230
- dc.w 217,205,193,183,172,163,154,145,137,129,122,115
- ; Tuning -1
- dc.w 862,814,768,725,684,646,610,575,543,513,484,457
- dc.w 431,407,384,363,342,323,305,288,272,256,242,228
- dc.w 216,203,192,181,171,161,152,144,136,128,121,114
-
- mt_chan1temp blk.l 5
- dc.w 1
- blk.w 21
- dc.w 2
- blk.w 21
- dc.w 4
- blk.w 21
- dc.w 8
- blk.w 11
-
- mt_SampleStarts blk.l 31,0
-
- mt_SongDataPtr dc.l 0
- mt_oldirq dc.l 0
-
- mt_speed dc.b 6
- mt_counter dc.b 0
- mt_SongPos dc.b 0
- mt_PBreakPos dc.b 0
- mt_PosJumpFlag dc.b 0
- mt_PBreakFlag dc.b 0
- mt_LowMask dc.b 0
- mt_PattDelTime dc.b 0
- mt_PattDelTime2 dc.b 0,0
- mt_PatternPos dc.w 0
- mt_DMACONtemp dc.w 0
- ;mt_data:
-